'''入门案例'''

# 引入包
from bs4 import BeautifulSoup

# 本地测试html
file = open('./入门案例.html', encoding='utf-8')
# 读取解析html
## 注意：打开html文件 bs4默认格式gbk!!!  需要转换格式utf-8
soup = BeautifulSoup(file, 'lxml')
# print(soup)


# 【使用用例】

## 根据标签名称查找节点
print('查找到第一个a标签数据：', soup.a)
## 获取查找节点的属性 返回是dict字典类型；
print('查找到第一个a标签属性数据：', soup.a.attrs)
'''输出结果如下：
查找到第一个a标签数据： <a href="shangguigu" id="a1">尚硅谷</a>
查找到第一个a标签属性数据： {'href': 'shangguigu', 'id': 'a1'}  '''


# bs4的函数

## find()
print('find函数查找第一个a标签数据：', soup.find('a'))
print('find函数查找a标签属性title为atitle的数据', soup.find('a', title='atitle'))
### 注意 查找class属性 会报错，需要将class 改为 class_ 这样做的目的时规避 class是python保留关键字！
print('find函数查找a标签属性class为ac1的数据', soup.find('a', class_='ac1'))
'''
find函数查找第一个a标签数据： <a href="shangguigu" id="a1">尚硅谷</a>
find函数查找a标签属性title为atitle的数据 <a class="ac1" href="www.baid.com" title="atitle">百度一下</a>
find函数查找a标签属性class为ac1的数据 <a class="ac1" href="www.baid.com" title="atitle">百度一下</a>  '''


## findAll()
print('find_all函数查找所有a标签数据：', soup.find_all('a'))
print('find_all函数查找指定的所有标签数据：', soup.find_all(['a', 'span']))
print('find_all函数查找所有的li标签：', soup.find_all('li'))
print('find_all函数查找前2个li标签：', soup.find_all('li', limit=2))
'''
find_all函数查找所有a标签数据： [<a href="shangguigu" id="a1">尚硅谷</a>, <a class="ac1" href="www.baid.com" title="atitle">百度一下</a>]
find_all函数查找指定的所有标签数据： [<a href="shangguigu" id="a1">尚硅谷</a>, <span>呵呵呵</span>, <a class="ac1" href="www.baid.com" title="atitle">百度一下</a>]
find_all函数查找所有的li标签： [<li>张三</li>, <li>李四</li>, <li>王五</li>, <li>马六</li>]
find_all函数查找前2个li标签： [<li>张三</li>, <li>李四</li>]   '''


## select() 推荐
print('select函数查找所有的a标签：', soup.select('a'))
print('select函数查找class属性为class="ac1"的标签：', soup.select('.ac1'))
print('select函数查找id属性为id="a1"的标签：', soup.select('#a1'))
print('select函数查找li标签带有id属性：', soup.select('li[id]'))
print('select函数查找li标签的id属性为id=”l1“的标签：', soup.select('li[id="l1"]'))
print('select函数查找所有的li标签与a标签：', soup.select('li, a'))
'''
select函数查找所有的a标签： [<a href="shangguigu" id="a1">尚硅谷</a>, <a class="ac1" href="www.baid.com" title="atitle">百度一下</a>]
select函数查找class属性为class="ac1"的标签： [<a class="ac1" href="www.baid.com" title="atitle">百度一下</a>]
select函数查找id属性为id="a1"的标签： [<a href="shangguigu" id="a1">尚硅谷</a>]
select函数查找li标签带有id属性： [<li id="l1">张三</li>, <li id="">王五</li>]
select函数查找li标签的id属性为id=”l1“的标签： [<li id="l1">张三</li>]   '''


# 层级选择器
print('层级选择器 获取div下所有的li标签：', soup.select('div li'))
# 注意：bs4下 空格可省略； 建议不要省略写上！
print('子代选择器 获取div下ul下所有li标签：', soup.select('div > ul > li'))


# 获取标签内容       注意：获取的是个列表所有取第一个元素；
div2 = soup.select('#div2')[0]
print('获取节点内容信息：', div2.string)
print('获取节点内容信息：', div2.get_text())
'''注意： string  与 get_text() 的区别:
         string : div标签中存在标签，将获取不到内容信息。
         get_text(): div标签中存在标签，也可以直接获取div标签下所有标签的内容。'''


p2 = soup.select('#p2')[0]
print('获取当前是哪种标签：', p2.name)
print('获取当前标签属性：', p2.attrs)
'''
获取当前是哪种标签： p
获取当前标签属性： {'id': 'p2'}   '''
